home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-12-18 | 6.2 KB | 279 lines | [TEXT/MPS ] |
- /*------------------------------------------------------------------------------
- # MacTutorApp
- #
- # A rudimentary application skeleton
- # J. Langowski / MacTutor 1989
- #------------------------------------------------------------------------------*/
- #include <Types.h>
- #include <QuickDraw.h>
- #include <Fonts.h>
- #include <Events.h>
- #include <OSEvents.h>
- #include <Controls.h>
- #include <Windows.h>
- #include <Menus.h>
- #include <TextEdit.h>
- #include <Dialogs.h>
- #include <Desk.h>
- #include <Scrap.h>
- #include <ToolUtils.h>
- #include <Memory.h>
- #include <SegLoad.h>
- #include <Files.h>
- #include <OSUtils.h>
- #include <Traps.h>
- #include <StdLib.h>
-
- #include "TDocument.h"
- #include "TApplication.h"
- #include "MacTutorApp.h"
- #include "MacTutorDoc.h"
- #include "MacTutorGrow.h"
-
- pascal void initFortran();
- pascal void exitFortran();
-
- // Methods for our application class
- TMacTutorApp::TMacTutorApp(void)
- {
- Handle menuBar;
-
- initFortran(); // initialize Fortran runtime system
-
- // read menus into menu bar
- menuBar = GetNewMBar(rMenuBar);
- // install menus
- SetMenuBar(menuBar);
- DisposHandle(menuBar);
- // add DA names to Apple menu
- AddResMenu(GetMHandle(mApple), 'DRVR');
- DrawMenuBar();
-
- // create empty mouse region
- fMouseRgn = NewRgn();
- // create a single empty document
- DoNew();
- }
-
- TMacTutorApp::~TMacTutorApp(void)
- {
- exitFortran(); // exit Fortran runtime system
- }
-
- // Tell TApplication class how much heap we need
- long TMacTutorApp::HeapNeeded(void)
- {
- return (kMinSize * 1024);
- }
-
- // Calculate a sleep value for WaitNextEvent. This takes into account the things
- // that DoIdle does with idle time.
-
- unsigned long TMacTutorApp::SleepVal(void)
- {
- unsigned long sleep;
- const long kSleepTime = 0x7fffffff; // a very large positive number
-
- sleep = kSleepTime; // default value for sleep
- if ((!fInBackground))
- {
- sleep = GetCaretTime(); // A reasonable time interval for MenuClocks, etc.
- }
- return sleep;
- }
-
- void TMacTutorApp::AdjustMenus(void)
- {
- WindowPtr frontmost;
- MenuHandle menu;
- Boolean undo,cutCopyClear,paste;
-
- TMacTutorDocument* fMacTutorCurDoc = (TMacTutorDocument*) fCurDoc;
-
- frontmost = FrontWindow();
-
- menu = GetMHandle(mFile);
- if ( fDocList->NumDocs() < kMaxOpenDocuments )
- EnableItem(menu, iNew); // New is enabled when we can open more documents
- else DisableItem(menu, iNew);
- if ( frontmost != (WindowPtr) nil ) // Close is enabled when there is a window to close
- EnableItem(menu, iClose);
- else DisableItem(menu, iClose);
-
- undo = false;
- cutCopyClear = false;
- paste = false;
-
- if ( fMacTutorCurDoc == nil )
- {
- undo = true; // all editing is enabled for DA windows
- cutCopyClear = true;
- paste = true;
- }
-
- menu = GetMHandle(mEdit);
- if ( undo )
- EnableItem(menu, iUndo);
- else
- DisableItem(menu, iUndo);
-
- if ( cutCopyClear )
- {
- EnableItem(menu, iCut);
- EnableItem(menu, iCopy);
- EnableItem(menu, iClear);
- }
- else
- {
- DisableItem(menu, iCut);
- DisableItem(menu, iCopy);
- DisableItem(menu, iClear);
- }
-
- if ( paste )
- EnableItem(menu, iPaste);
- else
- DisableItem(menu, iPaste);
-
- menu = GetMHandle(myMenu);
- EnableItem(menu, item1);
- EnableItem(menu, item2);
- EnableItem(menu, item3);
- EnableItem(menu, item5);
-
- CheckItem(menu, item1, false);
- CheckItem(menu, item2, false);
- CheckItem(menu, item3, false);
- CheckItem(menu, item5, false);
- CheckItem(menu, fMacTutorCurDoc->GetItemSelected(), true);
- } // AdjustMenus
-
- void TMacTutorApp::DoMenuCommand(short menuID, short menuItem)
- {
- short itemHit;
- Str255 daName;
- short daRefNum;
- float x; // for testing the Fortran call
- WindowPtr window;
- TMacTutorDocument* fMacTutorCurDoc = (TMacTutorDocument*) fCurDoc;
-
- window = FrontWindow();
- switch ( menuID )
- {
- case mApple:
- switch ( menuItem )
- {
- case iAbout: // About box
- itemHit = Alert(rAboutAlert, nil);
- break;
- default: // DAs etc.
- GetItem(GetMHandle(mApple), menuItem, daName);
- daRefNum = OpenDeskAcc(daName);
- break;
- }
- break;
- case mFile:
- switch ( menuItem )
- {
- case iNew:
- DoNew();
- break;
- case iClose:
- if (fMacTutorCurDoc != nil)
- {
- fDocList->RemoveDoc(fMacTutorCurDoc);
- delete fMacTutorCurDoc;
- }
- else CloseDeskAcc(((WindowPeek) fWhichWindow)->windowKind);
- break;
- case iQuit:
- Terminate();
- break;
- }
- break;
- case mEdit: // call SystemEdit for DA editing & MultiFinder
- if ( !SystemEdit(menuItem-1) )
- {
- switch ( menuItem )
- {
- case iCut:
- break;
- case iCopy:
- break;
- case iPaste:
- break;
- case iClear:
- break;
- }
- }
- break;
- case myMenu:
- if (fMacTutorCurDoc != nil)
- {
- switch ( menuItem )
- {
- case item1:
- fMacTutorCurDoc->SetDisplayString("\pC++");
- break;
- case item2:
- fMacTutorCurDoc->SetDisplayString("\pSample");
- break;
- case item3:
- fMacTutorCurDoc->SetDisplayString("\pApplication");
- break;
- case item5:
- fMacTutorCurDoc->SetDisplayString("\pHave Fun");
-
- x = 4.567;
- fMacTutorCurDoc->FtnCall(&menuItem,3456,&x);
-
- break;
- }
- fMacTutorCurDoc->SetItemSelected(menuItem);
- InvalRect(&(window->portRect));
- fMacTutorCurDoc->DoUpdate();
- }
- break;
- }
- HiliteMenu(0);
- } // DoMenuCommand
-
- // Create a new document and window.
- void TMacTutorApp::DoNew(void)
- {
- TMacTutorGrow* tMacTutorDoc;
-
- tMacTutorDoc = new TMacTutorGrow(rDocWindow,"\pNothing selected yet.");
- // if we didn't get an allocation error, add it to list
- if (tMacTutorDoc != nil)
- fDocList->AddDoc(tMacTutorDoc);
- } // DoNew
-
- void TMacTutorApp::Terminate(void)
- {
- ExitLoop();
- } // Terminate
-
-
- // Our application object, initialized in main(). We make it
- // global so our functions which don't belong to any class
- // can find the active document.
- TMacTutorApp *gTheApplication;
-
- // main is the entrypoint to the program
- int main(void)
- {
- // Create our application object. This MUST be the FIRST thing
- // done in main(), since it initializes the Toolbox for us.
- gTheApplication = new TMacTutorApp;
- if (gTheApplication == nil) // if we couldn't allocate object (impossible!?)
- return 0; // go back to Finder
-
- // Start our main event loop running. This won't return until user quits
- gTheApplication->EventLoop();
-
- // We always return a value, like good little ANSI worshippers
- return 0;
- }
-
-